<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 6.2.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/avatar.jpg">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/avatar.jpg">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/avatar.jpg">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">

<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&display=swap&subset=latin,latin-ext">
<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">
  <link rel="stylesheet" href="/lib/pace/pace-theme-big-counter.min.css">
  <script src="/lib/pace/pace.min.js"></script>

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"raphets.github.io","root":"/","scheme":"Mist","version":"7.8.0","exturl":false,"sidebar":{"position":"right","display":"hide","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":true,"style":"default"},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta name="description" content="HTTP是一个应用层协议，由请求和响应构成，是一个标准的客户端服务器模型。">
<meta property="og:type" content="article">
<meta property="og:title" content="HTTP 协议详解">
<meta property="og:url" content="https://raphets.github.io/archives/b9e67ec1.html">
<meta property="og:site_name" content="尚拙">
<meta property="og:description" content="HTTP是一个应用层协议，由请求和响应构成，是一个标准的客户端服务器模型。">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://raphets.github.io/archives/b9e67ec1/http%E8%AF%B7%E6%B1%82-%E5%93%8D%E5%BA%94%E6%A8%A1%E5%9E%8B.jpg">
<meta property="og:image" content="https://raphets.github.io/archives/b9e67ec1/Http%E8%AF%B7%E6%B1%82%E6%B6%88%E6%81%AF%E7%BB%93%E6%9E%84.png">
<meta property="og:image" content="https://raphets.github.io/archives/b9e67ec1/http%E5%93%8D%E5%BA%94%E6%B6%88%E6%81%AF%E6%A0%BC%E5%BC%8F.jpg">
<meta property="article:published_time" content="2019-04-30T03:46:04.000Z">
<meta property="article:modified_time" content="2022-05-25T02:42:58.008Z">
<meta property="article:author" content="John Doe">
<meta property="article:tag" content="HTTP">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://raphets.github.io/archives/b9e67ec1/http%E8%AF%B7%E6%B1%82-%E5%93%8D%E5%BA%94%E6%A8%A1%E5%9E%8B.jpg">

<link rel="canonical" href="https://raphets.github.io/archives/b9e67ec1.html">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>HTTP 协议详解 | 尚拙</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">尚拙</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">一个分享技术、学习成长的个人博客网站</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a>

  </li>
        <li class="menu-item menu-item-tool">

    <a href="/tool/" rel="section"><i class="fa fa-hammer fa-fw"></i>工具</a>

  </li>
        <li class="menu-item menu-item-about">

    <a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://raphets.github.io/archives/b9e67ec1.html">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.jpg">
      <meta itemprop="name" content="John Doe">
      <meta itemprop="description" content="不积跬步，无以至千里；不积小流，无以成江海。">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="尚拙">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          HTTP 协议详解
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2019-04-30 11:46:04" itemprop="dateCreated datePublished" datetime="2019-04-30T11:46:04+08:00">2019-04-30</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="far fa-calendar-check"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2022-05-25 10:42:58" itemprop="dateModified" datetime="2022-05-25T10:42:58+08:00">2022-05-25</time>
              </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-folder"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E6%8A%80%E6%9C%AF%E6%96%87%E7%AB%A0/" itemprop="url" rel="index"><span itemprop="name">技术文章</span></a>
                </span>
                  ，
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E6%8A%80%E6%9C%AF%E6%96%87%E7%AB%A0/%E5%85%B6%E4%BB%96/" itemprop="url" rel="index"><span itemprop="name">其他</span></a>
                </span>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <p>HTTP是一个应用层协议，由请求和响应构成，是一个标准的客户端服务器模型。</p>
<span id="more"></span>

<h1 id="一、HTTP简介"><a href="#一、HTTP简介" class="headerlink" title="一、HTTP简介"></a>一、HTTP简介</h1><p>HTTP协议是Hyper Text Transfer Protocol（超文本传输协议）的缩写,是用于从万维网（WWW:World Wide Web ）服务器传输超文本到本地浏览器的传送协议。</p>
<p>HTTP是一个基于TCP&#x2F;IP通信协议来传递数据（HTML 文件, 图片文件, 查询结果等）。</p>
<p>HTTP是一个属于应用层的面向对象的协议，由于其简捷、快速的方式，适用于分布式超媒体信息系统。它于1990年提出，经过几年的使用与发展，得到不断地完善和扩展。目前在WWW中使用的是HTTP&#x2F;1.0的第六版，HTTP&#x2F;1.1的规范化工作正在进行之中，而且HTTP-NG(Next Generation of HTTP)的建议已经提出。</p>
<p>HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后，向客户端发送响应信息。</p>
<img src="/archives/b9e67ec1/http%E8%AF%B7%E6%B1%82-%E5%93%8D%E5%BA%94%E6%A8%A1%E5%9E%8B.jpg" class="" title="HTTP请求-响应模型">

<h1 id="二、主要特点"><a href="#二、主要特点" class="headerlink" title="二、主要特点"></a>二、主要特点</h1><p>1、简单快速：客户向服务器请求服务时，只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单，使得HTTP服务器的程序规模小，因而通信速度很快。</p>
<p>2、灵活：HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。</p>
<p>3.无连接：无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求，并收到客户的应答后，即断开连接。采用这种方式可以节省传输时间。</p>
<p>4.无状态：HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息，则它必须重传，这样可能导致每次连接传送的数据量增大。另一方面，在服务器不需要先前信息时它的应答就较快。</p>
<p>5、支持B&#x2F;S及C&#x2F;S模式。</p>
<h1 id="三、HTTP之URL"><a href="#三、HTTP之URL" class="headerlink" title="三、HTTP之URL"></a>三、HTTP之URL</h1><p>HTTP使用统一资源标识符（Uniform Resource Identifiers, URI）来传输数据和建立连接。URL是一种特殊类型的URI，包含了用于查找某个资源的足够的信息</p>
<p>URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例，介绍下普通URL的各部分组成：</p>
<h4 id="http-www-aspxfans-com-8080-news-index-asp-boardID-5-amp-ID-24618-amp-page-1-name"><a href="#http-www-aspxfans-com-8080-news-index-asp-boardID-5-amp-ID-24618-amp-page-1-name" class="headerlink" title="http://www.aspxfans.com:8080/news/index.asp?boardID=5&amp;ID=24618&amp;page=1#name"></a><a target="_blank" rel="noopener" href="http://www.aspxfans.com:8080/news/index.asp?boardID=5&amp;ID=24618&amp;page=1#name">http://www.aspxfans.com:8080/news/index.asp?boardID=5&amp;ID=24618&amp;page=1#name</a></h4><p>从上面的URL可以看出，一个完整的URL包括以下几部分：</p>
<p> 1.协议部分：该URL的协议部分为“http：”，这代表网页使用的是HTTP协议。在Internet中可以使用多种协议，如HTTP，FTP等等本例中使用的是HTTP协议。在”HTTP”后面的“&#x2F;&#x2F;”为分隔符</p>
<p>2.域名部分：该URL的域名部分为“<a target="_blank" rel="noopener" href="http://www.aspxfans.com”.一个url中,也可以使用ip地址作为域名使用./">www.aspxfans.com”。一个URL中，也可以使用IP地址作为域名使用。</a></p>
<p>3.端口部分：跟在域名后面的是端口，域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分，如果省略端口部分，将采用默认端口。</p>
<p>4.虚拟目录部分：从域名后的第一个“&#x2F;”开始到最后一个“&#x2F;”为止，是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“&#x2F;news&#x2F;”</p>
<p>5.文件名部分：从域名后的最后一个“&#x2F;”开始到“？”为止，是文件名部分，如果没有“?”,则是从域名后的最后一个“&#x2F;”开始到“#”为止，是文件部分，如果没有“？”和“#”，那么从域名后的最后一个“&#x2F;”开始到结束，都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分，如果省略该部分，则使用默认的文件名</p>
<p>6.锚部分：从“#”开始到最后，都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分</p>
<p>7.参数部分：从“？”开始到“#”为止之间的部分为参数部分，又称搜索部分、查询部分。本例中的参数部分为“boardID&#x3D;5&amp;ID&#x3D;24618&amp;page&#x3D;1”。参数可以允许有多个参数，参数与参数之间用“&amp;”作为分隔符。</p>
<p>（原文：<a target="_blank" rel="noopener" href="http://blog.csdn.net/ergouge/article/details/8185219">http://blog.csdn.net/ergouge/article/details/8185219</a> ）</p>
<h1 id="四、URI和URL的区别"><a href="#四、URI和URL的区别" class="headerlink" title="四、URI和URL的区别"></a>四、URI和URL的区别</h1><h5 id="URI，是uniform-resource-identifier，统一资源标识符，用来唯一的标识一个资源。"><a href="#URI，是uniform-resource-identifier，统一资源标识符，用来唯一的标识一个资源。" class="headerlink" title="URI，是uniform resource identifier，统一资源标识符，用来唯一的标识一个资源。"></a>URI，是uniform resource identifier，统一资源标识符，用来唯一的标识一个资源。</h5><p>Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的。</p>
<p>URI一般由三部组成：<br> ①访问资源的命名机制<br> ②存放资源的主机名<br> ③资源自身的名称，由路径表示，着重强调于资源。</p>
<h5 id="URL是uniform-resource-locator，统一资源定位器，它是一种具体的URI，即URL可以用来标识一个资源，而且还指明了如何locate这个资源。"><a href="#URL是uniform-resource-locator，统一资源定位器，它是一种具体的URI，即URL可以用来标识一个资源，而且还指明了如何locate这个资源。" class="headerlink" title="URL是uniform resource locator，统一资源定位器，它是一种具体的URI，即URL可以用来标识一个资源，而且还指明了如何locate这个资源。"></a>URL是uniform resource locator，统一资源定位器，它是一种具体的URI，即URL可以用来标识一个资源，而且还指明了如何locate这个资源。</h5><p>URL是Internet上用来描述信息资源的字符串，主要用在各种WWW客户程序和服务器程序上，特别是著名的Mosaic。</p>
<p> 采用URL可以用一种统一的格式来描述各种信息资源，包括文件、服务器的地址和目录等。URL一般由三部组成：<br> ①协议(或称为服务方式)<br> ②存有该资源的主机IP地址(有时也包括端口号)<br> ③主机资源的具体地址。如目录和文件名等</p>
<h5 id="URN，uniform-resource-name，统一资源命名，是通过名字来标识资源，比如mailto-x6a-x61-118-x61-45-110-101-116-64-106-97-x76-x61-x2e-115-x75-x6e-x2e-x63-111-109-。"><a href="#URN，uniform-resource-name，统一资源命名，是通过名字来标识资源，比如mailto-x6a-x61-118-x61-45-110-101-116-64-106-97-x76-x61-x2e-115-x75-x6e-x2e-x63-111-109-。" class="headerlink" title="URN，uniform resource name，统一资源命名，是通过名字来标识资源，比如mailto:&#x6a;&#x61;&#118;&#x61;&#45;&#110;&#101;&#116;&#64;&#106;&#97;&#x76;&#x61;&#x2e;&#115;&#x75;&#x6e;&#x2e;&#x63;&#111;&#109;。"></a>URN，uniform resource name，统一资源命名，是通过名字来标识资源，比如mailto:<a href="mailto:&#x6a;&#x61;&#118;&#x61;&#45;&#110;&#101;&#116;&#64;&#106;&#97;&#x76;&#x61;&#x2e;&#115;&#x75;&#x6e;&#x2e;&#x63;&#111;&#109;">&#x6a;&#x61;&#118;&#x61;&#45;&#110;&#101;&#116;&#64;&#106;&#97;&#x76;&#x61;&#x2e;&#115;&#x75;&#x6e;&#x2e;&#x63;&#111;&#109;</a>。</h5><p>URI是以一种抽象的，高层次概念定义统一资源标识，而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说，每个 URL 都是 URI，但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类，即统一资源名称 (URN)，它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。</p>
<p>在Java的URI中，一个URI实例可以代表绝对的，也可以是相对的，只要它符合URI的语法规则。而URL类则不仅符合语义，还包含了定位该资源的信息，因此它不能是相对的。<br> 在Java类库中，URI类不包含任何访问资源的方法，它唯一的作用就是解析。</p>
<p>相反的是，URL类可以打开一个到达资源的流。</p>
<h1 id="五、HTTP之请求消息Request"><a href="#五、HTTP之请求消息Request" class="headerlink" title="五、HTTP之请求消息Request"></a>五、HTTP之请求消息Request</h1><p>客户端发送一个HTTP请求到服务器的请求消息包括以下格式：</p>
<h5 id="请求行（request-line）、请求头部（header）、空行和请求数据四个部分组成。"><a href="#请求行（request-line）、请求头部（header）、空行和请求数据四个部分组成。" class="headerlink" title="请求行（request line）、请求头部（header）、空行和请求数据四个部分组成。"></a>请求行（request line）、请求头部（header）、空行和请求数据四个部分组成。</h5><img src="/archives/b9e67ec1/Http%E8%AF%B7%E6%B1%82%E6%B6%88%E6%81%AF%E7%BB%93%E6%9E%84.png" class="" title="HTTP请求消息结构">

<p>请求行以一个方法符号开头，以空格分开，后面跟着请求的URI和协议的版本。</p>
<h5 id="Get请求例子，使用Charles抓取的request："><a href="#Get请求例子，使用Charles抓取的request：" class="headerlink" title="Get请求例子，使用Charles抓取的request："></a>Get请求例子，使用Charles抓取的request：</h5><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">GET /562f25980001b1b106000338.jpg HTTP/1.1</span><br><span class="line">Host    img.mukewang.com</span><br><span class="line">User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36</span><br><span class="line">Accept    image/webp,image/*,*/*;q=0.8</span><br><span class="line">Referer    http://www.imooc.com/</span><br><span class="line">Accept-Encoding    gzip, deflate, sdch</span><br><span class="line">Accept-Language    zh-CN,zh;q=0.8</span><br></pre></td></tr></table></figure>

<h5 id="第一部分：请求行，用来说明请求类型-要访问的资源以及所使用的HTTP版本"><a href="#第一部分：请求行，用来说明请求类型-要访问的资源以及所使用的HTTP版本" class="headerlink" title="第一部分：请求行，用来说明请求类型,要访问的资源以及所使用的HTTP版本."></a>第一部分：请求行，用来说明请求类型,要访问的资源以及所使用的HTTP版本.</h5><p>GET说明请求类型为GET,[&#x2F;562f25980001b1b106000338.jpg]为要访问的资源，该行的最后一部分说明使用的是HTTP1.1版本。</p>
<h5 id="第二部分：请求头部，紧接着请求行（即第一行）之后的部分，用来说明服务器要使用的附加信息"><a href="#第二部分：请求头部，紧接着请求行（即第一行）之后的部分，用来说明服务器要使用的附加信息" class="headerlink" title="第二部分：请求头部，紧接着请求行（即第一行）之后的部分，用来说明服务器要使用的附加信息"></a>第二部分：请求头部，紧接着请求行（即第一行）之后的部分，用来说明服务器要使用的附加信息</h5><p>从第二行起为请求头部，HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等</p>
<h5 id="第三部分：空行，请求头部后面的空行是必须的"><a href="#第三部分：空行，请求头部后面的空行是必须的" class="headerlink" title="第三部分：空行，请求头部后面的空行是必须的"></a>第三部分：空行，请求头部后面的空行是必须的</h5><p>即使第四部分的请求数据为空，也必须有空行。</p>
<h5 id="第四部分：请求数据也叫主体，可以添加任意的其他数据。"><a href="#第四部分：请求数据也叫主体，可以添加任意的其他数据。" class="headerlink" title="第四部分：请求数据也叫主体，可以添加任意的其他数据。"></a>第四部分：请求数据也叫主体，可以添加任意的其他数据。</h5><p>这个例子的请求数据为空。</p>
<h5 id="POST请求例子，使用Charles抓取的request："><a href="#POST请求例子，使用Charles抓取的request：" class="headerlink" title="POST请求例子，使用Charles抓取的request："></a>POST请求例子，使用Charles抓取的request：</h5><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">POST / HTTP1.1</span><br><span class="line">Host:www.wrox.com</span><br><span class="line">User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)</span><br><span class="line">Content-Type:application/x-www-form-urlencoded</span><br><span class="line">Content-Length:40</span><br><span class="line">Connection: Keep-Alive</span><br><span class="line"></span><br><span class="line">name=Professional%20Ajax&amp;publisher=Wiley</span><br></pre></td></tr></table></figure>

<p>第一部分：请求行，第一行明了是post请求，以及http1.1版本。<br> 第二部分：请求头部，第二行至第六行。<br> 第三部分：空行，第七行的空行。<br> 第四部分：请求数据，第八行。</p>
<h1 id="六、HTTP之响应消息Response"><a href="#六、HTTP之响应消息Response" class="headerlink" title="六、HTTP之响应消息Response"></a>六、HTTP之响应消息Response</h1><p>一般情况下，服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。</p>
<h5 id="HTTP响应也由四个部分组成，分别是：状态行、消息报头、空行和响应正文。"><a href="#HTTP响应也由四个部分组成，分别是：状态行、消息报头、空行和响应正文。" class="headerlink" title="HTTP响应也由四个部分组成，分别是：状态行、消息报头、空行和响应正文。"></a>HTTP响应也由四个部分组成，分别是：状态行、消息报头、空行和响应正文。</h5><img src="/archives/b9e67ec1/http%E5%93%8D%E5%BA%94%E6%B6%88%E6%81%AF%E6%A0%BC%E5%BC%8F.jpg" class="" title="HTTP响应消息格式">

<p><strong>例子</strong></p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">HTTP/1.1 200 OK</span><br><span class="line">Date: Fri, 22 May 2009 06:07:21 GMT</span><br><span class="line">Content-Type: text/html; charset=UTF-8</span><br></pre></td></tr></table></figure>

<h5 id="第一部分：状态行，由HTTP协议版本号，-状态码，-状态消息-三部分组成。"><a href="#第一部分：状态行，由HTTP协议版本号，-状态码，-状态消息-三部分组成。" class="headerlink" title="第一部分：状态行，由HTTP协议版本号， 状态码， 状态消息 三部分组成。"></a>第一部分：状态行，由HTTP协议版本号， 状态码， 状态消息 三部分组成。</h5><p>第一行为状态行，（HTTP&#x2F;1.1）表明HTTP版本为1.1版本，状态码为200，状态消息为（ok）</p>
<h5 id="第二部分：消息报头，用来说明客户端要使用的一些附加信息"><a href="#第二部分：消息报头，用来说明客户端要使用的一些附加信息" class="headerlink" title="第二部分：消息报头，用来说明客户端要使用的一些附加信息"></a>第二部分：消息报头，用来说明客户端要使用的一些附加信息</h5><p>第二行和第三行为消息报头，<br> Date:生成响应的日期和时间；Content-Type:指定了MIME类型的HTML(text&#x2F;html),编码类型是UTF-8</p>
<h5 id="第三部分：空行，消息报头后面的空行是必须的"><a href="#第三部分：空行，消息报头后面的空行是必须的" class="headerlink" title="第三部分：空行，消息报头后面的空行是必须的"></a>第三部分：空行，消息报头后面的空行是必须的</h5><h5 id="第四部分：响应正文，服务器返回给客户端的文本信息。"><a href="#第四部分：响应正文，服务器返回给客户端的文本信息。" class="headerlink" title="第四部分：响应正文，服务器返回给客户端的文本信息。"></a>第四部分：响应正文，服务器返回给客户端的文本信息。</h5><p>空行后面的html部分为响应正文。</p>
<h1 id="七、HTTP之状态码"><a href="#七、HTTP之状态码" class="headerlink" title="七、HTTP之状态码"></a>七、HTTP之状态码</h1><p>状态代码有三位数字组成，第一个数字定义了响应的类别，共分五种类别:</p>
<h6 id="1xx：指示信息–表示请求已接收，继续处理"><a href="#1xx：指示信息–表示请求已接收，继续处理" class="headerlink" title="1xx：指示信息–表示请求已接收，继续处理"></a>1xx：指示信息–表示请求已接收，继续处理</h6><h6 id="2xx：成功–表示请求已被成功接收、理解、接受"><a href="#2xx：成功–表示请求已被成功接收、理解、接受" class="headerlink" title="2xx：成功–表示请求已被成功接收、理解、接受"></a>2xx：成功–表示请求已被成功接收、理解、接受</h6><h6 id="3xx：重定向–要完成请求必须进行更进一步的操作"><a href="#3xx：重定向–要完成请求必须进行更进一步的操作" class="headerlink" title="3xx：重定向–要完成请求必须进行更进一步的操作"></a>3xx：重定向–要完成请求必须进行更进一步的操作</h6><h6 id="4xx：客户端错误–请求有语法错误或请求无法实现"><a href="#4xx：客户端错误–请求有语法错误或请求无法实现" class="headerlink" title="4xx：客户端错误–请求有语法错误或请求无法实现"></a>4xx：客户端错误–请求有语法错误或请求无法实现</h6><h6 id="5xx：服务器端错误–服务器未能实现合法的请求"><a href="#5xx：服务器端错误–服务器未能实现合法的请求" class="headerlink" title="5xx：服务器端错误–服务器未能实现合法的请求"></a>5xx：服务器端错误–服务器未能实现合法的请求</h6><p>常见状态码：</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">200 OK                        //客户端请求成功</span><br><span class="line">400 Bad Request               //客户端请求有语法错误，不能被服务器所理解</span><br><span class="line">401 Unauthorized              //请求未经授权，这个状态代码必须和WWW-Authenticate报头域一起使用 </span><br><span class="line">403 Forbidden                 //服务器收到请求，但是拒绝提供服务</span><br><span class="line">404 Not Found                 //请求资源不存在，eg：输入了错误的URL</span><br><span class="line">500 Internal Server Error     //服务器发生不可预期的错误</span><br><span class="line">503 Server Unavailable        //服务器当前不能处理客户端的请求，一段时间后可能恢复正常</span><br></pre></td></tr></table></figure>

<p>更多状态码<a target="_blank" rel="noopener" href="http://www.runoob.com/http/http-status-codes.html">http://www.runoob.com/http/http-status-codes.html</a></p>
<h1 id="八、HTTP请求方法"><a href="#八、HTTP请求方法" class="headerlink" title="八、HTTP请求方法"></a>八、HTTP请求方法</h1><p>根据HTTP标准，HTTP请求可以使用多种请求方法。<br> HTTP1.0定义了三种请求方法： GET, POST 和 HEAD方法。<br> HTTP1.1新增了五种请求方法：OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">GET     请求指定的页面信息，并返回实体主体。</span><br><span class="line">HEAD     类似于get请求，只不过返回的响应中没有具体的内容，用于获取报头</span><br><span class="line">POST     向指定资源提交数据进行处理请求（例如提交表单或者上传文件）。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。</span><br><span class="line">PUT     从客户端向服务器传送的数据取代指定的文档的内容。</span><br><span class="line">DELETE      请求服务器删除指定的页面。</span><br><span class="line">CONNECT     HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。</span><br><span class="line">OPTIONS     允许客户端查看服务器的性能。</span><br><span class="line">TRACE     回显服务器收到的请求，主要用于测试或诊断。</span><br></pre></td></tr></table></figure>

<h1 id="九、HTTP工作原理"><a href="#九、HTTP工作原理" class="headerlink" title="九、HTTP工作原理"></a>九、HTTP工作原理</h1><p>HTTP协议定义Web客户端如何从Web服务器请求Web页面，以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求&#x2F;响应模型。客户端向服务器发送一个请求报文，请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应，响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。</p>
<p>以下是 HTTP 请求&#x2F;响应的步骤：</p>
<h6 id="1、客户端连接到Web服务器"><a href="#1、客户端连接到Web服务器" class="headerlink" title="1、客户端连接到Web服务器"></a>1、客户端连接到Web服务器</h6><p>一个HTTP客户端，通常是浏览器，与Web服务器的HTTP端口（默认为80）建立一个TCP套接字连接。例如，<a target="_blank" rel="noopener" href="http://www.oakcms.cn./">http://www.oakcms.cn。</a></p>
<h6 id="2、发送HTTP请求"><a href="#2、发送HTTP请求" class="headerlink" title="2、发送HTTP请求"></a>2、发送HTTP请求</h6><p>通过TCP套接字，客户端向Web服务器发送一个文本的请求报文，一个请求报文由请求行、请求头部、空行和请求数据4部分组成。</p>
<h6 id="3、服务器接受请求并返回HTTP响应"><a href="#3、服务器接受请求并返回HTTP响应" class="headerlink" title="3、服务器接受请求并返回HTTP响应"></a>3、服务器接受请求并返回HTTP响应</h6><p>Web服务器解析请求，定位请求资源。服务器将资源复本写到TCP套接字，由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。</p>
<h6 id="4、释放连接TCP连接"><a href="#4、释放连接TCP连接" class="headerlink" title="4、释放连接TCP连接"></a>4、释放连接<a target="_blank" rel="noopener" href="http://www.jianshu.com/p/ef892323e68f">TCP连接</a></h6><p>若connection 模式为close，则服务器主动关闭<a target="_blank" rel="noopener" href="http://www.jianshu.com/p/ef892323e68f">TCP连接</a>，客户端被动关闭连接，释放<a target="_blank" rel="noopener" href="http://www.jianshu.com/p/ef892323e68f">TCP连接</a>;若connection 模式为keepalive，则该连接会保持一段时间，在该时间内可以继续接收请求;</p>
<h6 id="5、客户端浏览器解析HTML内容"><a href="#5、客户端浏览器解析HTML内容" class="headerlink" title="5、客户端浏览器解析HTML内容"></a>5、客户端浏览器解析HTML内容</h6><p>客户端浏览器首先解析状态行，查看表明请求是否成功的状态代码。然后解析每一个响应头，响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML，根据HTML的语法对其进行格式化，并在浏览器窗口中显示。</p>
<p>例如：在浏览器地址栏键入URL，按下回车之后会经历以下流程：</p>
<p>1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;</p>
<p>2、解析出 IP 地址后，根据该 IP 地址和默认端口 80，和服务器建立<a target="_blank" rel="noopener" href="http://www.jianshu.com/p/ef892323e68f">TCP连接</a>;</p>
<p>3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求，该请求报文作为 <a target="_blank" rel="noopener" href="http://www.jianshu.com/p/ef892323e68f">TCP 三次握手</a>的第三个报文的数据发送给服务器;</p>
<p>4、服务器对浏览器请求作出响应，并把对应的 html 文本发送给浏览器;</p>
<p>5、释放 <a target="_blank" rel="noopener" href="http://www.jianshu.com/p/ef892323e68f">TCP连接</a>;</p>
<p>6、浏览器将该 html 文本并显示内容;</p>
<h1 id="十、GET和POST请求的区别"><a href="#十、GET和POST请求的区别" class="headerlink" title="十、GET和POST请求的区别"></a>十、GET和POST请求的区别</h1><h6 id="GET请求"><a href="#GET请求" class="headerlink" title="GET请求"></a>GET请求</h6><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">GET /books/?sex=man&amp;name=Professional HTTP/1.1</span><br><span class="line">Host: www.wrox.com</span><br><span class="line">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)</span><br><span class="line">Gecko/20050225 Firefox/1.0.1</span><br><span class="line">Connection: Keep-Alive</span><br></pre></td></tr></table></figure>

<p>注意最后一行是空行</p>
<h6 id="POST请求"><a href="#POST请求" class="headerlink" title="POST请求"></a>POST请求</h6><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">POST / HTTP/1.1</span><br><span class="line">Host: www.wrox.com</span><br><span class="line">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)</span><br><span class="line">Gecko/20050225 Firefox/1.0.1</span><br><span class="line">Content-Type: application/x-www-form-urlencoded</span><br><span class="line">Content-Length: 40</span><br><span class="line">Connection: Keep-Alive</span><br><span class="line"></span><br><span class="line">name=Professional%20Ajax&amp;publisher=Wiley</span><br></pre></td></tr></table></figure>

<h4 id="1、GET提交，请求的数据会附在URL之后（就是把数据放置在HTTP协议头中），以-分割URL和传输数据，多个参数用-amp-连接。"><a href="#1、GET提交，请求的数据会附在URL之后（就是把数据放置在HTTP协议头中），以-分割URL和传输数据，多个参数用-amp-连接。" class="headerlink" title="1、GET提交，请求的数据会附在URL之后（就是把数据放置在HTTP协议头中），以?分割URL和传输数据，多个参数用&amp;连接。"></a>1、GET提交，请求的数据会附在URL之后（就是把数据放置在HTTP协议头中），以?分割URL和传输数据，多个参数用&amp;连接。</h4><p>例如：login.action?name&#x3D;hyddd&amp;password&#x3D;idontknow&amp;verify&#x3D;%E4%BD%A0 %E5%A5%BD。如果数据是英文字母&#x2F;数字，原样发送，如果是空格，转换为+，如果是中文&#x2F;其他字符，则直接把字符串用BASE64加密，得出如： %E4%BD%A0%E5%A5%BD，其中％XX中的XX为该符号以16进制表示的ASCII。</p>
<p>POST提交：把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据</p>
<h6 id="因此，GET提交的数据会在地址栏中显示出来，而POST提交，地址栏不会改变"><a href="#因此，GET提交的数据会在地址栏中显示出来，而POST提交，地址栏不会改变" class="headerlink" title="因此，GET提交的数据会在地址栏中显示出来，而POST提交，地址栏不会改变"></a>因此，GET提交的数据会在地址栏中显示出来，而POST提交，地址栏不会改变</h6><h4 id="2、传输数据的大小。"><a href="#2、传输数据的大小。" class="headerlink" title="2、传输数据的大小。"></a>2、传输数据的大小。</h4><p>首先声明：HTTP协议没有对传输的数据大小进行限制，HTTP协议规范也没有对URL长度进行限制。</p>
<p>而在实际开发中存在的限制主要有：</p>
<p><strong>GET</strong>:特定浏览器和服务器对URL长度有限制，例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器，如Netscape、FireFox等，理论上没有长度限制，其限制取决于操作系 统的支持。</p>
<p>因此对于GET提交时，传输数据就会受到URL长度的 限制。</p>
<p><strong>POST</strong>:由于不是通过URL传值，理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制，Apache、IIS6都有各自的配置。</p>
<h4 id="3、安全性"><a href="#3、安全性" class="headerlink" title="3、安全性"></a>3、安全性</h4><p>POST的安全性要比GET的安全性高。比如：通过GET提交数据，用户名和密码将明文出现在URL上，因为(1)登录页面有可能被浏览器缓存；(2)其他人查看浏览器的历史纪录，那么别人就可以拿到你的账号和密码了，除此之外，使用GET提交数据还可能会造成Cross-site request forgery攻击</p>
<h4 id="4、Http-get-post-soap协议都是在http上运行的"><a href="#4、Http-get-post-soap协议都是在http上运行的" class="headerlink" title="4、Http get,post,soap协议都是在http上运行的"></a>4、Http get,post,soap协议都是在http上运行的</h4><p>（1）get：请求参数是作为一个key&#x2F;value对的序列（查询字符串）附加到URL上的<br>查询字符串的长度受到web浏览器和web服务器的限制（如IE最多支持2048个字符），不适合传输大型数据集同时，它很不安全</p>
<p>（2）post：请求参数是在http标题的一个不同部分（名为entity body）传输的，这一部分用来传输表单信息，因此必须将Content-type设置为:application&#x2F;x-www-form- urlencoded。post设计用来支持web窗体上的用户字段，其参数也是作为key&#x2F;value对传输。但是：它不支持复杂数据类型，因为post没有定义传输数据结构的语义和规则。</p>
<p>（3）soap：是http post的一个专用版本，遵循一种特殊的xml消息格式。</p>
<p>Content-type设置为: text&#x2F;xml 任何数据都可以xml化。</p>
<p>Http协议定义了很多与服务器交互的方法，最基本的有4种，分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源，而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查，改，增，删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取&#x2F;查询资源信息，而POST一般用于更新资源信息.</p>
<p>我们看看GET和POST的区别</p>
<h6 id="1-GET提交的数据会放在URL之后，以-分割URL和传输数据，参数之间以-amp-相连，如EditPosts-aspx-name-x3D-test1-amp-id-x3D-123456-POST方法是把提交的数据放在HTTP包的Body中"><a href="#1-GET提交的数据会放在URL之后，以-分割URL和传输数据，参数之间以-amp-相连，如EditPosts-aspx-name-x3D-test1-amp-id-x3D-123456-POST方法是把提交的数据放在HTTP包的Body中" class="headerlink" title="1.GET提交的数据会放在URL之后，以?分割URL和传输数据，参数之间以&amp;相连，如EditPosts.aspx?name&#x3D;test1&amp;id&#x3D;123456. POST方法是把提交的数据放在HTTP包的Body中."></a>1.GET提交的数据会放在URL之后，以?分割URL和传输数据，参数之间以&amp;相连，如EditPosts.aspx?name&#x3D;test1&amp;id&#x3D;123456. POST方法是把提交的数据放在HTTP包的Body中.</h6><h6 id="2-GET提交的数据大小有限制（因为浏览器对URL的长度有限制），而POST方法提交的数据没有限制"><a href="#2-GET提交的数据大小有限制（因为浏览器对URL的长度有限制），而POST方法提交的数据没有限制" class="headerlink" title="2.GET提交的数据大小有限制（因为浏览器对URL的长度有限制），而POST方法提交的数据没有限制."></a>2.GET提交的数据大小有限制（因为浏览器对URL的长度有限制），而POST方法提交的数据没有限制.</h6><h6 id="3-GET方式需要使用Request-QueryString来取得变量的值，而POST方式通过Request-Form来获取变量的值。"><a href="#3-GET方式需要使用Request-QueryString来取得变量的值，而POST方式通过Request-Form来获取变量的值。" class="headerlink" title="3.GET方式需要使用Request.QueryString来取得变量的值，而POST方式通过Request.Form来获取变量的值。"></a>3.GET方式需要使用Request.QueryString来取得变量的值，而POST方式通过Request.Form来获取变量的值。</h6><h6 id="4-GET方式提交数据，会带来安全问题，比如一个登录页面，通过GET方式提交数据时，用户名和密码将出现在URL上，如果页面可以被缓存或者其他人可以访问这台机器，就可以从历史记录获得该用户的账号和密码"><a href="#4-GET方式提交数据，会带来安全问题，比如一个登录页面，通过GET方式提交数据时，用户名和密码将出现在URL上，如果页面可以被缓存或者其他人可以访问这台机器，就可以从历史记录获得该用户的账号和密码" class="headerlink" title="4.GET方式提交数据，会带来安全问题，比如一个登录页面，通过GET方式提交数据时，用户名和密码将出现在URL上，如果页面可以被缓存或者其他人可以访问这台机器，就可以从历史记录获得该用户的账号和密码."></a>4.GET方式提交数据，会带来安全问题，比如一个登录页面，通过GET方式提交数据时，用户名和密码将出现在URL上，如果页面可以被缓存或者其他人可以访问这台机器，就可以从历史记录获得该用户的账号和密码.</h6>
    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/HTTP/" rel="tag"><i class="fa fa-tag"></i> HTTP</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/archives/9e761e8b.html" rel="prev" title="SwipeRefreshLayout 首次进入界面自动刷新">
      <i class="fa fa-chevron-left"></i> SwipeRefreshLayout 首次进入界面自动刷新
    </a></div>
      <div class="post-nav-item">
    <a href="/archives/5478cd25.html" rel="next" title="Java 小数点位数保留的方法总结">
      Java 小数点位数保留的方法总结 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%B8%80%E3%80%81HTTP%E7%AE%80%E4%BB%8B"><span class="nav-number">1.</span> <span class="nav-text">一、HTTP简介</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%BA%8C%E3%80%81%E4%B8%BB%E8%A6%81%E7%89%B9%E7%82%B9"><span class="nav-number">2.</span> <span class="nav-text">二、主要特点</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%B8%89%E3%80%81HTTP%E4%B9%8BURL"><span class="nav-number">3.</span> <span class="nav-text">三、HTTP之URL</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#http-www-aspxfans-com-8080-news-index-asp-boardID-5-amp-ID-24618-amp-page-1-name"><span class="nav-number">3.0.0.1.</span> <span class="nav-text">http:&#x2F;&#x2F;www.aspxfans.com:8080&#x2F;news&#x2F;index.asp?boardID&#x3D;5&amp;ID&#x3D;24618&amp;page&#x3D;1#name</span></a></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%9B%9B%E3%80%81URI%E5%92%8CURL%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="nav-number">4.</span> <span class="nav-text">四、URI和URL的区别</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#URI%EF%BC%8C%E6%98%AFuniform-resource-identifier%EF%BC%8C%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E8%AF%86%E7%AC%A6%EF%BC%8C%E7%94%A8%E6%9D%A5%E5%94%AF%E4%B8%80%E7%9A%84%E6%A0%87%E8%AF%86%E4%B8%80%E4%B8%AA%E8%B5%84%E6%BA%90%E3%80%82"><span class="nav-number">4.0.0.0.1.</span> <span class="nav-text">URI，是uniform resource identifier，统一资源标识符，用来唯一的标识一个资源。</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#URL%E6%98%AFuniform-resource-locator%EF%BC%8C%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E5%99%A8%EF%BC%8C%E5%AE%83%E6%98%AF%E4%B8%80%E7%A7%8D%E5%85%B7%E4%BD%93%E7%9A%84URI%EF%BC%8C%E5%8D%B3URL%E5%8F%AF%E4%BB%A5%E7%94%A8%E6%9D%A5%E6%A0%87%E8%AF%86%E4%B8%80%E4%B8%AA%E8%B5%84%E6%BA%90%EF%BC%8C%E8%80%8C%E4%B8%94%E8%BF%98%E6%8C%87%E6%98%8E%E4%BA%86%E5%A6%82%E4%BD%95locate%E8%BF%99%E4%B8%AA%E8%B5%84%E6%BA%90%E3%80%82"><span class="nav-number">4.0.0.0.2.</span> <span class="nav-text">URL是uniform resource locator，统一资源定位器，它是一种具体的URI，即URL可以用来标识一个资源，而且还指明了如何locate这个资源。</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#URN%EF%BC%8Cuniform-resource-name%EF%BC%8C%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%91%BD%E5%90%8D%EF%BC%8C%E6%98%AF%E9%80%9A%E8%BF%87%E5%90%8D%E5%AD%97%E6%9D%A5%E6%A0%87%E8%AF%86%E8%B5%84%E6%BA%90%EF%BC%8C%E6%AF%94%E5%A6%82mailto-x6a-x61-118-x61-45-110-101-116-64-106-97-x76-x61-x2e-115-x75-x6e-x2e-x63-111-109-%E3%80%82"><span class="nav-number">4.0.0.0.3.</span> <span class="nav-text">URN，uniform resource name，统一资源命名，是通过名字来标识资源，比如mailto:java-net@java.sun.com。</span></a></li></ol></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%BA%94%E3%80%81HTTP%E4%B9%8B%E8%AF%B7%E6%B1%82%E6%B6%88%E6%81%AFRequest"><span class="nav-number">5.</span> <span class="nav-text">五、HTTP之请求消息Request</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#%E8%AF%B7%E6%B1%82%E8%A1%8C%EF%BC%88request-line%EF%BC%89%E3%80%81%E8%AF%B7%E6%B1%82%E5%A4%B4%E9%83%A8%EF%BC%88header%EF%BC%89%E3%80%81%E7%A9%BA%E8%A1%8C%E5%92%8C%E8%AF%B7%E6%B1%82%E6%95%B0%E6%8D%AE%E5%9B%9B%E4%B8%AA%E9%83%A8%E5%88%86%E7%BB%84%E6%88%90%E3%80%82"><span class="nav-number">5.0.0.0.1.</span> <span class="nav-text">请求行（request line）、请求头部（header）、空行和请求数据四个部分组成。</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#Get%E8%AF%B7%E6%B1%82%E4%BE%8B%E5%AD%90%EF%BC%8C%E4%BD%BF%E7%94%A8Charles%E6%8A%93%E5%8F%96%E7%9A%84request%EF%BC%9A"><span class="nav-number">5.0.0.0.2.</span> <span class="nav-text">Get请求例子，使用Charles抓取的request：</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%9A%E8%AF%B7%E6%B1%82%E8%A1%8C%EF%BC%8C%E7%94%A8%E6%9D%A5%E8%AF%B4%E6%98%8E%E8%AF%B7%E6%B1%82%E7%B1%BB%E5%9E%8B-%E8%A6%81%E8%AE%BF%E9%97%AE%E7%9A%84%E8%B5%84%E6%BA%90%E4%BB%A5%E5%8F%8A%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84HTTP%E7%89%88%E6%9C%AC"><span class="nav-number">5.0.0.0.3.</span> <span class="nav-text">第一部分：请求行，用来说明请求类型,要访问的资源以及所使用的HTTP版本.</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#%E7%AC%AC%E4%BA%8C%E9%83%A8%E5%88%86%EF%BC%9A%E8%AF%B7%E6%B1%82%E5%A4%B4%E9%83%A8%EF%BC%8C%E7%B4%A7%E6%8E%A5%E7%9D%80%E8%AF%B7%E6%B1%82%E8%A1%8C%EF%BC%88%E5%8D%B3%E7%AC%AC%E4%B8%80%E8%A1%8C%EF%BC%89%E4%B9%8B%E5%90%8E%E7%9A%84%E9%83%A8%E5%88%86%EF%BC%8C%E7%94%A8%E6%9D%A5%E8%AF%B4%E6%98%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%A6%81%E4%BD%BF%E7%94%A8%E7%9A%84%E9%99%84%E5%8A%A0%E4%BF%A1%E6%81%AF"><span class="nav-number">5.0.0.0.4.</span> <span class="nav-text">第二部分：请求头部，紧接着请求行（即第一行）之后的部分，用来说明服务器要使用的附加信息</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#%E7%AC%AC%E4%B8%89%E9%83%A8%E5%88%86%EF%BC%9A%E7%A9%BA%E8%A1%8C%EF%BC%8C%E8%AF%B7%E6%B1%82%E5%A4%B4%E9%83%A8%E5%90%8E%E9%9D%A2%E7%9A%84%E7%A9%BA%E8%A1%8C%E6%98%AF%E5%BF%85%E9%A1%BB%E7%9A%84"><span class="nav-number">5.0.0.0.5.</span> <span class="nav-text">第三部分：空行，请求头部后面的空行是必须的</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#%E7%AC%AC%E5%9B%9B%E9%83%A8%E5%88%86%EF%BC%9A%E8%AF%B7%E6%B1%82%E6%95%B0%E6%8D%AE%E4%B9%9F%E5%8F%AB%E4%B8%BB%E4%BD%93%EF%BC%8C%E5%8F%AF%E4%BB%A5%E6%B7%BB%E5%8A%A0%E4%BB%BB%E6%84%8F%E7%9A%84%E5%85%B6%E4%BB%96%E6%95%B0%E6%8D%AE%E3%80%82"><span class="nav-number">5.0.0.0.6.</span> <span class="nav-text">第四部分：请求数据也叫主体，可以添加任意的其他数据。</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#POST%E8%AF%B7%E6%B1%82%E4%BE%8B%E5%AD%90%EF%BC%8C%E4%BD%BF%E7%94%A8Charles%E6%8A%93%E5%8F%96%E7%9A%84request%EF%BC%9A"><span class="nav-number">5.0.0.0.7.</span> <span class="nav-text">POST请求例子，使用Charles抓取的request：</span></a></li></ol></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%85%AD%E3%80%81HTTP%E4%B9%8B%E5%93%8D%E5%BA%94%E6%B6%88%E6%81%AFResponse"><span class="nav-number">6.</span> <span class="nav-text">六、HTTP之响应消息Response</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#HTTP%E5%93%8D%E5%BA%94%E4%B9%9F%E7%94%B1%E5%9B%9B%E4%B8%AA%E9%83%A8%E5%88%86%E7%BB%84%E6%88%90%EF%BC%8C%E5%88%86%E5%88%AB%E6%98%AF%EF%BC%9A%E7%8A%B6%E6%80%81%E8%A1%8C%E3%80%81%E6%B6%88%E6%81%AF%E6%8A%A5%E5%A4%B4%E3%80%81%E7%A9%BA%E8%A1%8C%E5%92%8C%E5%93%8D%E5%BA%94%E6%AD%A3%E6%96%87%E3%80%82"><span class="nav-number">6.0.0.0.1.</span> <span class="nav-text">HTTP响应也由四个部分组成，分别是：状态行、消息报头、空行和响应正文。</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%9A%E7%8A%B6%E6%80%81%E8%A1%8C%EF%BC%8C%E7%94%B1HTTP%E5%8D%8F%E8%AE%AE%E7%89%88%E6%9C%AC%E5%8F%B7%EF%BC%8C-%E7%8A%B6%E6%80%81%E7%A0%81%EF%BC%8C-%E7%8A%B6%E6%80%81%E6%B6%88%E6%81%AF-%E4%B8%89%E9%83%A8%E5%88%86%E7%BB%84%E6%88%90%E3%80%82"><span class="nav-number">6.0.0.0.2.</span> <span class="nav-text">第一部分：状态行，由HTTP协议版本号， 状态码， 状态消息 三部分组成。</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#%E7%AC%AC%E4%BA%8C%E9%83%A8%E5%88%86%EF%BC%9A%E6%B6%88%E6%81%AF%E6%8A%A5%E5%A4%B4%EF%BC%8C%E7%94%A8%E6%9D%A5%E8%AF%B4%E6%98%8E%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A6%81%E4%BD%BF%E7%94%A8%E7%9A%84%E4%B8%80%E4%BA%9B%E9%99%84%E5%8A%A0%E4%BF%A1%E6%81%AF"><span class="nav-number">6.0.0.0.3.</span> <span class="nav-text">第二部分：消息报头，用来说明客户端要使用的一些附加信息</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#%E7%AC%AC%E4%B8%89%E9%83%A8%E5%88%86%EF%BC%9A%E7%A9%BA%E8%A1%8C%EF%BC%8C%E6%B6%88%E6%81%AF%E6%8A%A5%E5%A4%B4%E5%90%8E%E9%9D%A2%E7%9A%84%E7%A9%BA%E8%A1%8C%E6%98%AF%E5%BF%85%E9%A1%BB%E7%9A%84"><span class="nav-number">6.0.0.0.4.</span> <span class="nav-text">第三部分：空行，消息报头后面的空行是必须的</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#%E7%AC%AC%E5%9B%9B%E9%83%A8%E5%88%86%EF%BC%9A%E5%93%8D%E5%BA%94%E6%AD%A3%E6%96%87%EF%BC%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%94%E5%9B%9E%E7%BB%99%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E6%96%87%E6%9C%AC%E4%BF%A1%E6%81%AF%E3%80%82"><span class="nav-number">6.0.0.0.5.</span> <span class="nav-text">第四部分：响应正文，服务器返回给客户端的文本信息。</span></a></li></ol></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%B8%83%E3%80%81HTTP%E4%B9%8B%E7%8A%B6%E6%80%81%E7%A0%81"><span class="nav-number">7.</span> <span class="nav-text">七、HTTP之状态码</span></a><ol class="nav-child"><li class="nav-item nav-level-6"><a class="nav-link" href="#1xx%EF%BC%9A%E6%8C%87%E7%A4%BA%E4%BF%A1%E6%81%AF%E2%80%93%E8%A1%A8%E7%A4%BA%E8%AF%B7%E6%B1%82%E5%B7%B2%E6%8E%A5%E6%94%B6%EF%BC%8C%E7%BB%A7%E7%BB%AD%E5%A4%84%E7%90%86"><span class="nav-number">7.0.0.0.0.1.</span> <span class="nav-text">1xx：指示信息–表示请求已接收，继续处理</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#2xx%EF%BC%9A%E6%88%90%E5%8A%9F%E2%80%93%E8%A1%A8%E7%A4%BA%E8%AF%B7%E6%B1%82%E5%B7%B2%E8%A2%AB%E6%88%90%E5%8A%9F%E6%8E%A5%E6%94%B6%E3%80%81%E7%90%86%E8%A7%A3%E3%80%81%E6%8E%A5%E5%8F%97"><span class="nav-number">7.0.0.0.0.2.</span> <span class="nav-text">2xx：成功–表示请求已被成功接收、理解、接受</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#3xx%EF%BC%9A%E9%87%8D%E5%AE%9A%E5%90%91%E2%80%93%E8%A6%81%E5%AE%8C%E6%88%90%E8%AF%B7%E6%B1%82%E5%BF%85%E9%A1%BB%E8%BF%9B%E8%A1%8C%E6%9B%B4%E8%BF%9B%E4%B8%80%E6%AD%A5%E7%9A%84%E6%93%8D%E4%BD%9C"><span class="nav-number">7.0.0.0.0.3.</span> <span class="nav-text">3xx：重定向–要完成请求必须进行更进一步的操作</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#4xx%EF%BC%9A%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%94%99%E8%AF%AF%E2%80%93%E8%AF%B7%E6%B1%82%E6%9C%89%E8%AF%AD%E6%B3%95%E9%94%99%E8%AF%AF%E6%88%96%E8%AF%B7%E6%B1%82%E6%97%A0%E6%B3%95%E5%AE%9E%E7%8E%B0"><span class="nav-number">7.0.0.0.0.4.</span> <span class="nav-text">4xx：客户端错误–请求有语法错误或请求无法实现</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#5xx%EF%BC%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E9%94%99%E8%AF%AF%E2%80%93%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9C%AA%E8%83%BD%E5%AE%9E%E7%8E%B0%E5%90%88%E6%B3%95%E7%9A%84%E8%AF%B7%E6%B1%82"><span class="nav-number">7.0.0.0.0.5.</span> <span class="nav-text">5xx：服务器端错误–服务器未能实现合法的请求</span></a></li></ol></li></ol></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%85%AB%E3%80%81HTTP%E8%AF%B7%E6%B1%82%E6%96%B9%E6%B3%95"><span class="nav-number">8.</span> <span class="nav-text">八、HTTP请求方法</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%B9%9D%E3%80%81HTTP%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86"><span class="nav-number">9.</span> <span class="nav-text">九、HTTP工作原理</span></a><ol class="nav-child"><li class="nav-item nav-level-6"><a class="nav-link" href="#1%E3%80%81%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%BF%9E%E6%8E%A5%E5%88%B0Web%E6%9C%8D%E5%8A%A1%E5%99%A8"><span class="nav-number">9.0.0.0.0.1.</span> <span class="nav-text">1、客户端连接到Web服务器</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#2%E3%80%81%E5%8F%91%E9%80%81HTTP%E8%AF%B7%E6%B1%82"><span class="nav-number">9.0.0.0.0.2.</span> <span class="nav-text">2、发送HTTP请求</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#3%E3%80%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A5%E5%8F%97%E8%AF%B7%E6%B1%82%E5%B9%B6%E8%BF%94%E5%9B%9EHTTP%E5%93%8D%E5%BA%94"><span class="nav-number">9.0.0.0.0.3.</span> <span class="nav-text">3、服务器接受请求并返回HTTP响应</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#4%E3%80%81%E9%87%8A%E6%94%BE%E8%BF%9E%E6%8E%A5TCP%E8%BF%9E%E6%8E%A5"><span class="nav-number">9.0.0.0.0.4.</span> <span class="nav-text">4、释放连接TCP连接</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#5%E3%80%81%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%B5%8F%E8%A7%88%E5%99%A8%E8%A7%A3%E6%9E%90HTML%E5%86%85%E5%AE%B9"><span class="nav-number">9.0.0.0.0.5.</span> <span class="nav-text">5、客户端浏览器解析HTML内容</span></a></li></ol></li></ol></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%8D%81%E3%80%81GET%E5%92%8CPOST%E8%AF%B7%E6%B1%82%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="nav-number">10.</span> <span class="nav-text">十、GET和POST请求的区别</span></a><ol class="nav-child"><li class="nav-item nav-level-6"><a class="nav-link" href="#GET%E8%AF%B7%E6%B1%82"><span class="nav-number">10.0.0.0.0.1.</span> <span class="nav-text">GET请求</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#POST%E8%AF%B7%E6%B1%82"><span class="nav-number">10.0.0.0.0.2.</span> <span class="nav-text">POST请求</span></a></li></ol></li></ol></li><li class="nav-item nav-level-4"><a class="nav-link" href="#1%E3%80%81GET%E6%8F%90%E4%BA%A4%EF%BC%8C%E8%AF%B7%E6%B1%82%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%9A%E9%99%84%E5%9C%A8URL%E4%B9%8B%E5%90%8E%EF%BC%88%E5%B0%B1%E6%98%AF%E6%8A%8A%E6%95%B0%E6%8D%AE%E6%94%BE%E7%BD%AE%E5%9C%A8HTTP%E5%8D%8F%E8%AE%AE%E5%A4%B4%E4%B8%AD%EF%BC%89%EF%BC%8C%E4%BB%A5-%E5%88%86%E5%89%B2URL%E5%92%8C%E4%BC%A0%E8%BE%93%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%A4%9A%E4%B8%AA%E5%8F%82%E6%95%B0%E7%94%A8-amp-%E8%BF%9E%E6%8E%A5%E3%80%82"><span class="nav-number">10.0.0.1.</span> <span class="nav-text">1、GET提交，请求的数据会附在URL之后（就是把数据放置在HTTP协议头中），以?分割URL和传输数据，多个参数用&amp;连接。</span></a><ol class="nav-child"><li class="nav-item nav-level-6"><a class="nav-link" href="#%E5%9B%A0%E6%AD%A4%EF%BC%8CGET%E6%8F%90%E4%BA%A4%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%9A%E5%9C%A8%E5%9C%B0%E5%9D%80%E6%A0%8F%E4%B8%AD%E6%98%BE%E7%A4%BA%E5%87%BA%E6%9D%A5%EF%BC%8C%E8%80%8CPOST%E6%8F%90%E4%BA%A4%EF%BC%8C%E5%9C%B0%E5%9D%80%E6%A0%8F%E4%B8%8D%E4%BC%9A%E6%94%B9%E5%8F%98"><span class="nav-number">10.0.0.1.0.1.</span> <span class="nav-text">因此，GET提交的数据会在地址栏中显示出来，而POST提交，地址栏不会改变</span></a></li></ol></li></ol></li><li class="nav-item nav-level-4"><a class="nav-link" href="#2%E3%80%81%E4%BC%A0%E8%BE%93%E6%95%B0%E6%8D%AE%E7%9A%84%E5%A4%A7%E5%B0%8F%E3%80%82"><span class="nav-number">10.0.0.2.</span> <span class="nav-text">2、传输数据的大小。</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#3%E3%80%81%E5%AE%89%E5%85%A8%E6%80%A7"><span class="nav-number">10.0.0.3.</span> <span class="nav-text">3、安全性</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#4%E3%80%81Http-get-post-soap%E5%8D%8F%E8%AE%AE%E9%83%BD%E6%98%AF%E5%9C%A8http%E4%B8%8A%E8%BF%90%E8%A1%8C%E7%9A%84"><span class="nav-number">10.0.0.4.</span> <span class="nav-text">4、Http get,post,soap协议都是在http上运行的</span></a><ol class="nav-child"><li class="nav-item nav-level-6"><a class="nav-link" href="#1-GET%E6%8F%90%E4%BA%A4%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%9A%E6%94%BE%E5%9C%A8URL%E4%B9%8B%E5%90%8E%EF%BC%8C%E4%BB%A5-%E5%88%86%E5%89%B2URL%E5%92%8C%E4%BC%A0%E8%BE%93%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%8F%82%E6%95%B0%E4%B9%8B%E9%97%B4%E4%BB%A5-amp-%E7%9B%B8%E8%BF%9E%EF%BC%8C%E5%A6%82EditPosts-aspx-name-x3D-test1-amp-id-x3D-123456-POST%E6%96%B9%E6%B3%95%E6%98%AF%E6%8A%8A%E6%8F%90%E4%BA%A4%E7%9A%84%E6%95%B0%E6%8D%AE%E6%94%BE%E5%9C%A8HTTP%E5%8C%85%E7%9A%84Body%E4%B8%AD"><span class="nav-number">10.0.0.4.0.1.</span> <span class="nav-text">1.GET提交的数据会放在URL之后，以?分割URL和传输数据，参数之间以&amp;相连，如EditPosts.aspx?name&#x3D;test1&amp;id&#x3D;123456. POST方法是把提交的数据放在HTTP包的Body中.</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#2-GET%E6%8F%90%E4%BA%A4%E7%9A%84%E6%95%B0%E6%8D%AE%E5%A4%A7%E5%B0%8F%E6%9C%89%E9%99%90%E5%88%B6%EF%BC%88%E5%9B%A0%E4%B8%BA%E6%B5%8F%E8%A7%88%E5%99%A8%E5%AF%B9URL%E7%9A%84%E9%95%BF%E5%BA%A6%E6%9C%89%E9%99%90%E5%88%B6%EF%BC%89%EF%BC%8C%E8%80%8CPOST%E6%96%B9%E6%B3%95%E6%8F%90%E4%BA%A4%E7%9A%84%E6%95%B0%E6%8D%AE%E6%B2%A1%E6%9C%89%E9%99%90%E5%88%B6"><span class="nav-number">10.0.0.4.0.2.</span> <span class="nav-text">2.GET提交的数据大小有限制（因为浏览器对URL的长度有限制），而POST方法提交的数据没有限制.</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#3-GET%E6%96%B9%E5%BC%8F%E9%9C%80%E8%A6%81%E4%BD%BF%E7%94%A8Request-QueryString%E6%9D%A5%E5%8F%96%E5%BE%97%E5%8F%98%E9%87%8F%E7%9A%84%E5%80%BC%EF%BC%8C%E8%80%8CPOST%E6%96%B9%E5%BC%8F%E9%80%9A%E8%BF%87Request-Form%E6%9D%A5%E8%8E%B7%E5%8F%96%E5%8F%98%E9%87%8F%E7%9A%84%E5%80%BC%E3%80%82"><span class="nav-number">10.0.0.4.0.3.</span> <span class="nav-text">3.GET方式需要使用Request.QueryString来取得变量的值，而POST方式通过Request.Form来获取变量的值。</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#4-GET%E6%96%B9%E5%BC%8F%E6%8F%90%E4%BA%A4%E6%95%B0%E6%8D%AE%EF%BC%8C%E4%BC%9A%E5%B8%A6%E6%9D%A5%E5%AE%89%E5%85%A8%E9%97%AE%E9%A2%98%EF%BC%8C%E6%AF%94%E5%A6%82%E4%B8%80%E4%B8%AA%E7%99%BB%E5%BD%95%E9%A1%B5%E9%9D%A2%EF%BC%8C%E9%80%9A%E8%BF%87GET%E6%96%B9%E5%BC%8F%E6%8F%90%E4%BA%A4%E6%95%B0%E6%8D%AE%E6%97%B6%EF%BC%8C%E7%94%A8%E6%88%B7%E5%90%8D%E5%92%8C%E5%AF%86%E7%A0%81%E5%B0%86%E5%87%BA%E7%8E%B0%E5%9C%A8URL%E4%B8%8A%EF%BC%8C%E5%A6%82%E6%9E%9C%E9%A1%B5%E9%9D%A2%E5%8F%AF%E4%BB%A5%E8%A2%AB%E7%BC%93%E5%AD%98%E6%88%96%E8%80%85%E5%85%B6%E4%BB%96%E4%BA%BA%E5%8F%AF%E4%BB%A5%E8%AE%BF%E9%97%AE%E8%BF%99%E5%8F%B0%E6%9C%BA%E5%99%A8%EF%BC%8C%E5%B0%B1%E5%8F%AF%E4%BB%A5%E4%BB%8E%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E8%8E%B7%E5%BE%97%E8%AF%A5%E7%94%A8%E6%88%B7%E7%9A%84%E8%B4%A6%E5%8F%B7%E5%92%8C%E5%AF%86%E7%A0%81"><span class="nav-number">10.0.0.4.0.4.</span> <span class="nav-text">4.GET方式提交数据，会带来安全问题，比如一个登录页面，通过GET方式提交数据时，用户名和密码将出现在URL上，如果页面可以被缓存或者其他人可以访问这台机器，就可以从历史记录获得该用户的账号和密码.</span></a></li></ol></li></ol></li></ol></li></ol></li></ol></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="John Doe"
      src="/images/avatar.jpg">
  <p class="site-author-name" itemprop="name">John Doe</p>
  <div class="site-description" itemprop="description">不积跬步，无以至千里；不积小流，无以成江海。</div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">47</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">8</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">32</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2025</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">John Doe</span>
</div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/muse.js"></script>


<script src="/js/next-boot.js"></script>




  















  

  

</body>
</html>
